package cl.foursoft.sirvicod.dao.implementacion.postgresql;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import cl.foursoft.sirvicod.dao.implementacion.DBBase;
import cl.foursoft.sirvicod.dao.interfaces.IUsuario;
import cl.foursoft.sirvicod.dao.transferObject.DepartamentoTO;
import cl.foursoft.sirvicod.dao.transferObject.EstadoDeptoTO;
import cl.foursoft.sirvicod.dao.transferObject.UsuarioTO;
import cl.foursoft.sirvicod.util.UtilLog;

public class UsuarioDB extends DBBase implements IUsuario{

	public UsuarioDB(Connection connection){
		this.conn = connection;
	}
	
	@Override
	public int guardarUsuario(UsuarioTO usuario) 
	{
		int resp = -1;
		
		PreparedStatement pstmt = null;

		String query = 	" INSERT INTO usuario " +
							" ( " +
								" id_usuario, " +
								" nombre, " +
								" apellido_paterno, " +
								" apellido_materno, " +
								" rut, " +
								" contrasena" +
							" ) " +
						" VALUES " +
							" (?, ?, ?, ?, ?, ?);";
		
		try
		{
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1, usuario.getIdUsuario());
			pstmt.setString(2, usuario.getNombre());
			pstmt.setString(3, usuario.getApellidoPaterno());
			pstmt.setString(4, usuario.getApellidoMaterno());
			pstmt.setString(5, usuario.getRut());
			pstmt.setString(6, usuario.getContrasena());
			
			resp = pstmt.executeUpdate();
			
			pstmt.close();
		}
		catch (SQLException sqle){
			UtilLog.registrar(sqle);
		}
		catch (Exception ex) {
			UtilLog.registrar(ex);
		}		
		finally{
			if (pstmt != null) {
				try{
					pstmt.close();					
				} 
				catch (SQLException e) {
					UtilLog.registrar(e); 
					e.printStackTrace();
				}
			}
		}				
		return resp;
	}

	@Override
	public UsuarioTO obtenerUsuario(String idUsuario, String contrasena) 
	{
		UsuarioTO resp = null;
		
		ResultSet rs = null;
		
		PreparedStatement pstmt = null;
		
		String query = 	" SELECT " +
							" id_usuario, " +
							" nombre, " +
							" apellido_paterno, " +
							" apellido_materno, " +
							" rut, " +
							" contrasena " +
						" FROM " +
							" usuario " +
						" WHERE " +
							" id_usuario = ? " +
						" AND " +
							" contrasena = ? ";
		
		try
		{
			pstmt = conn.prepareStatement(query);
			pstmt.setString(1, idUsuario);
			pstmt.setString(2, contrasena);
			
			rs = pstmt.executeQuery();
			
			if(rs.next())
			{
				resp = new UsuarioTO();
				
				resp.setIdUsuario(rs.getString("id_usuario"));
				resp.setNombre(rs.getString("nombre"));
				resp.setApellidoPaterno(rs.getString("apellido_paterno"));
				resp.setApellidoMaterno(rs.getString("apellido_materno"));
				resp.setRut(rs.getString("rut"));
				resp.setContrasena(rs.getString("contrasena"));				
			}
			rs.close();
			
			pstmt.close();
		}
		catch (SQLException sqle){
			UtilLog.registrar(sqle);
		}
		catch (Exception ex) {
			UtilLog.registrar(ex);
		}		
		finally{
			if (pstmt != null) {
				try{
					pstmt.close();					
				} 
				catch (SQLException e) {
					UtilLog.registrar(e); 
					e.printStackTrace();
				}
			}
		}				
		return resp;
	}
}
